package com.ruoyi.finance.service.impl;

import java.util.List;

import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.finance.domain.Supplier;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.finance.mapper.CustomersMapper;
import com.ruoyi.finance.domain.Customers;
import com.ruoyi.finance.service.ICustomersService;

/**
 * 客户管理Service业务层处理
 * 
 * @author 李伟
 * @date 2025-02-25
 */
@Service
public class CustomersServiceImpl implements ICustomersService 
{
    @Autowired
    private CustomersMapper customersMapper;

    /**
     * 查询客户管理
     * 
     * @param id 客户管理主键
     * @return 客户管理
     */
    @Override
    public Customers selectCustomersById(Long id)
    {
        return customersMapper.selectCustomersById(id);
    }

    /**
     * 查询客户管理列表
     * 
     * @param customers 客户管理
     * @return 客户管理
     */
    @Override
    public List<Customers> selectCustomersList(Customers customers)
    {
        return customersMapper.selectCustomersList(customers);
    }

    /**
     * 新增客户管理
     * 
     * @param customers 客户管理
     * @return 结果
     */
    @Override
    public int insertCustomers(Customers customers)
    {
        // 检查传入的 Customers 对象是否为空
        if (customers == null) {
            throw new IllegalArgumentException("客户信息不能为空");
        }

        // 检查客户名称是否为空
        if (StringUtils.isEmpty(customers.getCustomerName())) {
            throw new IllegalArgumentException("客户名称不能为空");
        }

        // 检查联系方式是否为空
        if (StringUtils.isEmpty(customers.getContactInfo())) {
            throw new IllegalArgumentException("联系方式不能为空");
        }

        // 检查客户编码是否为空
        if (StringUtils.isEmpty(customers.getCustomerCode())) {
            throw new IllegalArgumentException("客户编码不能为空");
        }


        // 检查电话号码格式
        if (!isValidPhoneNumber(customers.getContactInfo())) {
            throw new IllegalArgumentException("电话号码格式不正确");
        }

        // 检查客户编码是否唯一
        Customers existingCustomer = customersMapper.selectCustomersByCode(customers.getCustomerCode());
        if (existingCustomer != null) {
            throw new RuntimeException("客户编码已存在");
        }

        // 执行插入操作
        return customersMapper.insertCustomers(customers);
    }

    private boolean isValidPhoneNumber(String phone) {
        // 使用正则表达式验证电话号码
        String regex = "^\\d{11}$"; // 假设电话号码为11位数字
        return phone.matches(regex);
    }

    /**
     * 修改客户管理
     * 
     * @param customers 客户管理
     * @return 结果
     */
    @Override
    public int updateCustomers(Customers customers)
    {
        return customersMapper.updateCustomers(customers);
    }

    /**
     * 批量删除客户管理
     * 
     * @param ids 需要删除的客户管理主键
     * @return 结果
     */
    @Override
    public int deleteCustomersByIds(Long[] ids)
    {
        return customersMapper.deleteCustomersByIds(ids);
    }

    /**
     * 删除客户管理信息
     * 
     * @param id 客户管理主键
     * @return 结果
     */
    @Override
    public int deleteCustomersById(Long id)
    {
        return customersMapper.deleteCustomersById(id);
    }

    @Override
    public int qiyong(Long[] ids) {
        // 检查 ids 是否为空或无效
        if (ids == null || ids.length == 0) {
            throw new IllegalArgumentException("传入的客户ID列表不能为空");
        }
        // 定义状态常量
        final int STATUS_DISABLED = 1;

        // 遍历 ids，检查是否已有客户被禁用
        for (Long id : ids) {
            Customers customers = customersMapper.selectCustomersById(id);
            // 检查 supplier 是否为 null
            if (customers == null) {
                throw new RuntimeException("客户ID为 " + id + " 的记录不存在");
            }
            // 检查供应商状态
            if (customers.getStaut() == STATUS_DISABLED) {
                throw new RuntimeException("所选客户中已有用户已被启用，请勿重复启用");
            }
        }

        // 执行禁用操作
        for (Long id : ids) {
            customersMapper.qiyongCustomersById(id);
        }

        return 1;
    }

    @Override
    public int jinyong(Long[] ids) {
        // 检查 ids 是否为空或无效
        if (ids == null || ids.length == 0) {
            throw new IllegalArgumentException("传入的客户ID列表不能为空");
        }

        // 定义状态常量
        final int STATUS_DISABLED = 2;

        // 遍历 ids，检查是否已有客户被禁用
        for (Long id : ids) {
            Customers customers = customersMapper.selectCustomersById(id);
            // 检查 supplier 是否为 null
            if (customers == null) {
                throw new RuntimeException("客户ID为 " + id + " 的记录不存在");
            }
            // 检查供应商状态
            if (customers.getStaut() == STATUS_DISABLED) {
                throw new RuntimeException("所选客户中已有用户已被禁用,"+"请勿重复禁用");
            }
        }

        // 执行禁用操作
        for (Long id : ids) {
            customersMapper.jinyongCustomersById(id);
        }

        return 1;
    }
}
